因為工作偶爾也會有閒暇時間,尤其我們是業務單位提出需求,我們才有專案做,所以呢閒暇時間我也不想浪費掉,我就找到了一個類似kaggle的平台,人工智慧共創平台,他也有練習場,裡面有幾個題目可以讓各位小試身手。
於是我選擇了員工離職率預測(資料連結),這是我第一次拿到資料後,從頭到尾自己做,成績如何就不要太在意啦,之後有時間會再繼續調整把名次往上爬的。
但對於這個平台我必須說一下,這個離職率預測竟然沒有資料欄位介紹!!!而他的欄位又有點看不懂,例如:
甚麼工作資歷又分12345、訓練時數又有ABC...等等,我是真的不太懂,但還是繼續給他做下去,如果有大神看得懂可以留言幫我解釋一下,我是真的想了解每個欄位的意思!
import pandas as pd
train = pd.read_csv('./train.csv')
test = pd.read_csv('./test.csv')
print(train.head(5))
查看前五筆資料。
可以看出來這份資料應該都幫我們處理過,但為確保裡面資料都label過,我們還是來看看每個變數的值。
for i in train.columns:
print(i)
print(list(train[i].unique()))
print("================================================")
因為變數很多,就截一部分就好,確定除了NA值外,沒有別的文字了。
還可以看看敘述統計~
print(train.describe())
可以從中看到總筆數和平均值等等的數據,train資料集的總筆數是14392筆
接下來呢,我會針對NA值去做處理,先看每個變數的NA值總數。
train_na_sum = train.isna().sum()
print(train_na_sum)
print("===============================")
test_na_sum = test.isna().sum()
print(test_na_sum)
print("===============================")
可以發現train和test的最高學歷和畢業學校類別兩個變數的NA值特別多,而其他的train是73個,test是18個。
train
test
因為最高學歷和畢業學校類別兩個變數的NA值佔總筆數比例太高,我會直接刪除此兩個變數,而其他的變數我這邊偷懶,則填入中位數。
注意喔,這裡只是簡單示範,但NA值有時候有它的意義,要嚴謹的話就必須檢查,或許可以把它當作一類,而且這邊大部分都是類別變數,多數作法會不太建議類別變數補值,又或者是可以在不影響原樣本比例的情況下隨機填補。
對於NA值處理可以參考[這邊]。(https://notesforai.blogspot.com/2018/05/05.html?m=1)
train = train.drop(columns=['最高學歷','畢業學校類別'])
for i in train.columns:
train[i] = train[i].fillna(train[i].median())
再執行一次看各個變數的NA值。
train_na_sum = train.isna().sum()
print(train_na_sum)
print("===============================")
test_na_sum = test.isna().sum()
print(test_na_sum)
print("===============================")
結果發現NA值都為0囉~
接著我們看看幾個年份。
print(train['yyyy'].unique())
train資料集總共有4個年份,我們要預測test資料集的員工是否2018年有離職。
那會不會有比如說2016年沒離職但2017年卻就沒有資料的員工呢?
我們來觀察看看~
for i in train['PerNo'].unique():
df = train[train["PerNo"] == i ]
df_last = df.iloc[-1]
if df_last["yyyy"] != 2017 and df_last.PerStatus == 0.0:
train = train[~train["PerNo"].isin([i])]
n += 1
else:
m += 1
print("留下員編數:" , m , "刪除員編數:" ,n)
結果真的有阿,我把這些員工的資料都給刪除掉,共留下4295個員工資料,總資料筆數剩下13870筆。
今天先到這邊吧!明天再來介紹簡單的資料視覺化及建模!
很多人拿到資料就很興奮直接把資料丟進去建模,得到結果,NONONO~拿到資料一定要先剖析資料,雖然我也沒怎麼剖析XDD。切記拿到資料後一定要先觀察資料型態,做資料清洗的動作,再丟入建模型。
資料分析就像做菜一樣,收集資料如同買菜,資料清洗如同是洗菜、切菜、備料,一定要準備、清洗好材料,才能讓廚師做出一道完美的料理。
若有不夠完善的地方,歡迎各位邦友留言補充和指教喔~要鞭的話鞭小力一點XDDD
參考文章:
缺失值處理 https://notesforai.blogspot.com/2018/05/05.html?m=1